<?php
 Session_Start () ;
 If (!$_SESSION ["repertoire_config"]) { Header ("Location: ../../sortie.php?sortie=3") ; }
 Include ("../../include/garennes.cfg") ;
 Include ("../../include//init.php") ;
 Include ("../include/config.inc") ;
 Include ("../include/fonctions.inc") ;
 verif_droits ($droit_courant, $_SESSION ["code"]) ;
 
 $maj = var_courante ("maj", 0, null) ;
 $script_maj = var_courante ("script_maj", 0, null) ;
 
 /**
 * Mise a jour specifique a la version 0.6.4
 * @param mixed $id_sql Identifiant de la connexion SQL
 */
 Function maj_064 ($id_sql)
  {
   // Exportation des donnees de 'gestion' vers 'etablissements'
   $gestion = SQl_commande ("SELECT * FROM gestion LIMIT 1", $id_sql) ;
   $g = SQL_tableau_associatif ($gestion,"") ;
   $ok = SQL_commande ("UPDATE etablissements SET nombre_chiffres='".$g ["nombre_chiffres"]."',coefficient='".$g ["coefficient"]."',
			signature='".$g ["signature"]."',moyenne='".$g ["moyenne"]."',max='".$g ["max"]."',aff_nc='".$g ["aff_nc"]."',aff_c='".$g ["aff_c"]."',
			seuil_bas='".$g ["seuil_bas"]."',seuil_haut='".$g ["seuil_haut"]."',aff_evolution='".$g ["aff_evolution"]."',
			aff_nombre_notes='".$g ["aff_nombre_notes"]."',bulletin_cpe='".$g ["bulletin_cpe"]."',examen_blanc='".$g ["examen_blanc"]."',
			entete_bulletins='".$g ["entete_bulletins"]."',entete_releves='".$g ["entete_releves"]."',imprimer_logo_bulletins='".$g ["imprimer_logo_bulletins"]."',
			imprimer_logo_releves='".$g ["imprimer_logo_releves"]."',logo_bulletins='".$g ["logo_bulletins"]."',logo_releves='".$g ["logo_releves"]."'", $id_sql) ;
   $ok = SQL_commande ("ALTER TABLE gestion DROP coefficient,DROP signature,DROP moyenne,DROP max,DROP aff_nc", $id_sql) ;
   $ok = SQL_commande ("ALTER TABLE gestion DROP aff_c,DROP seuil_bas,DROP seuil_haut,DROP aff_evolution,DROP aff_nombre_notes", $id_sql) ;
   $ok = SQL_commande ("ALTER TABLE gestion DROP bulletin_cpe,DROP examen_blanc,DROP logo_bulletins,DROP logo_releves", $id_sql) ;
   $ok = SQL_commande ("ALTER TABLE gestion DROP entete_bulletins,DROP entete_releves,DROP imprimer_logo_bulletins,DROP imprimer_logo_releves", $id_sql) ;
  }

 /**
 * Mise a jour specifique a la version 0.6.5
 * @param mixed $id_sql Identifiant de la connexion SQL
 */
 Function maj_065 ($id_sql)
  {
   Global $millesime ;
   $ok = SQL_commande ("UPDATE appreciations SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE autorisations SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE calcul_moyenne SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE classe_virtuelle SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE classement SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE classes SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE configuration SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE controles SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE disciplines SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE eleves SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE etablissements SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE groupes_classe SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE groupes_eleve SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE groupes_utilisateurs SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE interdictions SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE memo_notes SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE moyennes SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE notes SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE options_eleve SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE periodes_classe SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE services_classe SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE services_prof SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE simulation_coefficients SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE sous_matieres SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE type_classe_virtuelle SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE types_examens SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE types_periode SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE types_regimes SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE types_utilisateurs SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE utilisateurs SET millesime='".$millesime."'", $id_sql) ;
   $ok = SQL_commande ("UPDATE vie_scolaire SET millesime='".$millesime."'", $id_sql) ;
  }
 
 $resultats = SQL_commande ("SELECT * FROM menus WHERE numero='".$droit_courant."' AND ordre='0' LIMIT 1", $id_sql) ;
 $l = SQL_tableau_associatif ($resultats, "") ;
 Echo entete_page ("", "") ;
 Echo "<html><head>" ;
 entete_html ("Garennes", "travail", 1) ;
 Echo styles ("none", "none", "none", $l ["lien"], "none") ;
 Echo "</head>" ;
 
 Echo "<body background=\"../images/fond.png\" text=\"#000000\">" ;
 Echo "<center><font color=\"#0000ff\">Mise&nbsp;&agrave;&nbsp;jour&nbsp;de&nbsp;Garennes</font></center>" ;
 
 If (IsSet ($maj) And ((($droit_courant == $droit_admin) And ($multi_etablissement == 0)) Or (($droit_courant == $droit_supervision) And ($multi_etablissement == 1))))
  {
   $separateur = determine_separateur_chemin () ;
   Switch ($maj)
    {
     // Preparation
     Case 1 : // Telechargement du fichier
              If ($_FILES ["fichier"]["error"] == 0)
               {
                If (Is_UpLoaded_File ($_FILES ["fichier"]["tmp_name"]))
                 {
		  $ok = decompactage ($_FILES ["fichier"]["tmp_name"], "..".$separateur."..".$separateur."tmp", "mise_a_jour") ;
		  If ($ok == 1)
		   {
		    // Verification de la presence de certains fichiers
		    If (File_Exists ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur."garennes_maj.php"))
		     {
		      Include ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur."garennes_maj.php") ;
		      // Verification de la version (est-ce anterieur ?)
		      $version_actuelle = Explode ("-", $version_garennes) ;
		      
		      // Verification de la presence de certains fichiers
		      If (File_Exists ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$liste_fichiers) And
		          File_Exists ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$donnees))
		       {
		        $table_verif = verification_ecriture ($liste_fichiers, "..".$separateur."..".$separateur."tmp", "mise_a_jour", "..".$separateur."..".$separateur, $donnees) ;
		        Include ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$liste_fichiers) ;
		        $erreur = 0 ;
		        For ($i = 1 ; $i <= $table_verif [0] ; $i++)
		         {
		          If (($table_verif [$i] != 1) And ($table_verif [$i] != 3))
		           {
		            If ($erreur == 0)
			     {
			      Echo "<center><font color=\"#ff0000\"><b>Liste des erreurs &agrave; corriger pour effectuer la mise &agrave; jour :</b></font></center><br>" ;
			      // Entete
			      Echo "<table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"".$l ["couleur_fond"]."\" style=\"border-collapse:collapse;border:1px solid #000000\">" ;
			      Echo "<tr bgcolor=\"".$l ["lien"]."\"><td align=\"center\">&nbsp;<b>Type</b>&nbsp;</td><td align=\"center\">&nbsp;<b>Nom</b>&nbsp;</td><td align=\"center\">&nbsp;<b>Probl&egrave;me</b>&nbsp;</td></tr>" ;
			     }
			    // Ecriture probleme
			    Echo "<tr" ; If ($erreur%2) { Echo " bgcolor=\"".$l ["nom"]."\"" ; }
			    Echo "><td>&nbsp;" ;
			    If ($table_verif [$i] == 0) { Echo "Le&nbsp;fichier&nbsp;</td><td>&nbsp;<b>".$fiche [$i][0].$fiche [$i][1] ; }
			    Else { Echo "Le&nbsp;r&eacute;pertoire&nbsp;</td><td>&nbsp;<b>".$fiche [$i][0] ; }
			    Echo "</b>&nbsp;</td><td>&nbsp;n'est&nbsp;pas&nbsp;accessible&nbsp;en&nbsp;&eacute;criture.</td></tr>" ;
			    $erreur++ ;
		           }
		         }
		        If ($erreur > 0)
		         {
		          Echo "</table><br>" ;
		          Echo "<center><font color=\"#ff0000\"><b>Corriger les erreurs ci-dessus, et reprenez la proc&eacute;dure de mise &agrave; jour...</b></font><br>" ;
			  Echo "<br><br>Sous Linux (ou Unix), vous pouvez faire, en mode texte, un <b>\"chown &lt;nom utilisateur processus apache&gt; * -R\"</b> ou un <b>\"chmod 0777 * -R\"</b><br>" ;
			  Echo "&agrave; partir du r&eacute;pertoire <b>".$repertoire_racine."</b><br><br>" ;
			  Echo "Par exemple, sous Debian, le nom utilisateur du processus Apache est \"www-data\" d'o&ugrave; la commande : <b>\"chown www-data * -R\"</b><br>" ;
			  Echo "<b>ATTENTION &Agrave; BIEN RESPECTER LES ESPACES.</b><br><br>" ;
			  Echo "<a href=\"./travail.php\">&nbsp;Retour&nbsp;&agrave;&nbsp;la&nbsp;premi&egrave;re&nbsp;page&nbsp;</a>" ;
			  Echo "</body></html>" ;
		          // Nettoyage
		          rmdir_recursif ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour") ;
		          Exit ;
		         }
			Else
			 {
			  If (!IsSet ($type_maj)) { $type_maj = 0 ; }
			  Switch ($type_maj)
			   {
			    Default : // Mise a jour de Garennes
			     Case 0 : // Suite ... -> Confirmation d'installation de maj
			              Echo "<table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"".$l ["couleur_fond"]."\" style=\"border-collapse:collapse;border:1px solid #000000\">" ;
			              Echo "<tr bgcolor=\"".$l ["lien"]."\"><td align=\"center\">&nbsp;<b>Validation&nbsp;de&nbsp;la&nbsp;Mise&nbsp;&agrave;&nbsp;jour...</b>&nbsp;</td></tr>" ;
			              Echo "<tr><td><br>&nbsp;Toutes les v&eacute;rifications du fichier joint ont &eacute;t&eacute; effectu&eacute;es avec succ&egrave;s.&nbsp;<br>" ;
			              Echo "<br>&nbsp;Le syst&egrave;me est pr&ecirc;t pour la mise &agrave; jour...&nbsp;<br><br><br>" ;
			              Echo "&nbsp;Date&nbsp;du&nbsp;patch&nbsp;:&nbsp;<b>".decode_date_4 ($patch_date)."</b>&nbsp;<br>" ;
			              /*
			              Include ("../../include/garennes_bdd.cfg") ;
			              Include ("../../include/liste_tables.inc") ;
			              $car_bases = caracteristiques_bases ($bdd, $test) ;
			              Echo "&nbsp;Base(s)&nbsp;pouvant&nbsp;&ecirc;tre&nbsp;mise(s)&nbsp;&agrave;&nbsp;jour&nbsp;:&nbsp;" ;
			              $ok_aff = 0 ;
			              For ($i = 1 ; $i <= $car_bases [0][0] ; $i++)
			               {
			                If (SubStr ($car_bases [$i][4], 0, StrLen ($patch_version)) == $patch_garennes_mini)
			                 {
			                  If ($ok_aff == 1) { Echo ", " ; }
			                  Echo $car_bases [$i][0]."&nbsp;(<b>".$car_bases [$i][4]."</b>)&nbsp;" ;
			                  $ok_aff = 1 ;
			                 }
			               }
			              */
			              Echo "<br>&nbsp;Version&nbsp;de&nbsp;Garennes&nbsp;apr&egrave;s&nbsp;mise&nbsp;&agrave;&nbsp;jour&nbsp;:&nbsp;<b>".$patch_version."</b>&nbsp;<br>" ;
			              
			              Echo "<br><br>&nbsp;</td></tr>" ;
			              Echo "<tr><td align=\"center\"><br><a href=\"./mise_a_jour.php?maj=3\">&nbsp;Mise&nbsp;&agrave;&nbsp;jour&nbsp;MAINTENANT&nbsp;</a>" ;
			              Echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" ;
			              Echo "<a href=\"./mise_a_jour.php?maj=2\">&nbsp;ANNULER&nbsp;la&nbsp;mise&nbsp;&agrave;&nbsp;jour&nbsp;</a>&nbsp;<br>&nbsp;</td></tr>" ;
			              Echo "<tr><td><br>&nbsp;<b>Liste&nbsp;des&nbsp;fichiers&nbsp;de&nbsp;ce&nbsp;patch&nbsp;:</b>&nbsp;<br><br>" ;
			              Include ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$liste_fichiers) ;
			              For ($i = 1 ; $i <= $fiche [0][0] ; $i++)
                                       {
			                $fiche [$i][0] = Str_Replace ("/", $separateur, $fiche [$i][0]) ;
                                        $fiche [$i][1] = Str_Replace ("/", $separateur, $fiche [$i][1]) ;
                                        Echo "&nbsp;&nbsp;&nbsp;".$fiche [$i][0].$fiche [$i][1]."&nbsp;<br>" ;
			               }
			              Echo "<br>&nbsp;</td></tr>" ;
     			              Echo "</table></body></html>" ;
				      Break ;
			     Case 1 : // Installation d'un module
			              Echo "<table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"".$l ["couleur_fond"]."\" style=\"border-collapse:collapse;border:1px solid #000000\">" ;
			              Echo "<tr bgcolor=\"".$l ["lien"]."\"><td align=\"center\">&nbsp;<b>Validation&nbsp;de&nbsp;l'installation&nbsp;du&nbsp;module&nbsp;".$nom_module.".</b>&nbsp;</td></tr>" ;
			              Echo "<tr><td><br>&nbsp;Toutes les v&eacute;rifications du fichier joint ont &eacute;t&eacute; effectu&eacute;es avec succ&egrave;s.&nbsp;<br>" ;
			              Echo "<br>&nbsp;Le syst&egrave;me est pr&ecirc;t pour l'installation...&nbsp;<br><br><br>" ;
			              Echo "&nbsp;Date&nbsp;du&nbsp;module&nbsp;:&nbsp;<b>".decode_date_4 ($patch_date)."</b>&nbsp;<br>" ;
				      Echo "<br>&nbsp;Version&nbsp;du&nbsp;module&nbsp;:&nbsp;<b>".$patch_version."</b>&nbsp;<br>" ;
				      Echo "<br><br>&nbsp;</td></tr>" ;
			              Echo "<tr><td align=\"center\"><br><a href=\"./mise_a_jour.php?maj=3\">&nbsp;Installation&nbsp;du&nbsp;module&nbsp;MAINTENANT&nbsp;</a>" ;
			              Echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" ;
			              Echo "<a href=\"./mise_a_jour.php?maj=2\">&nbsp;ANNULER&nbsp;l'installation&nbsp;</a>&nbsp;<br>&nbsp;</td></tr>" ;
			              Echo "<tr><td><br>&nbsp;<b>Liste&nbsp;des&nbsp;fichiers&nbsp;de&nbsp;ce&nbsp;module&nbsp;:</b>&nbsp;<br><br>" ;
			              Include ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$liste_fichiers) ;
			              For ($i = 1 ; $i <= $fiche [0][0] ; $i++)
                                       {
			                $fiche [$i][0] = Str_Replace ("/", $separateur, $fiche [$i][0]) ;
                                        $fiche [$i][1] = Str_Replace ("/", $separateur, $fiche [$i][1]) ;
                                        Echo "&nbsp;&nbsp;&nbsp;".$fiche [$i][0].$fiche [$i][1]."&nbsp;<br>" ;
			               }
			              Echo "<br>&nbsp;</td></tr>" ;
     			              Echo "</table></body></html>" ;
			              Break ;
			   }
			  Exit ;
			 }
		       }
		      Else { $message = "Probl&egrave;me : Le fichier ne contient pas les fichiers attendues : Fichier de mise &agrave; mise tronqu&eacute; ?" ; }
		     }
		    Else { $message = "Probl&egrave;me : Le fichier ne contient pas les donn&eacute;es attendues...: Est-ce le bon ?" ; }
		   }
		  Else { $message = "Probl&egrave;me de cr&eacute;ation de sous-r&eacute;pertoire dans le r&eacute;pertoire temporaire..." ; }
		  // Nettoyage
		  rmdir_recursif ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour") ;
                 }
               }
              Else
               {
                Switch ((integer)$_FILES ["fichier"]["error"])
                 {
                  Case 1 : $message = "Le param&egrave;tre <i>upload_max_filesize</i> dans php.ini est trop petit." ; Break ;
                  Case 2 : $message = "Le param&egrave;tre HTML <i>MAX_FILE_SIZE</i> est trop petit." ; Break ;
                  Case 3 : $message = "Le transfert du fichier ne s'est pas effectu&eacute; dans sa totalit&eacute;." ; Break ;
                  Case 4 : $message = "Aucun transfert de fichier ne s'est effectu&eacute;." ; Break ;
                 }
               }
              Break ;
     // Annulation de la procedure
     Case 2 : // Nettoyage
	      rmdir_recursif ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour") ;
	      $message = "Mise &agrave; jour annul&eacute;e !" ;
	      Break ;
     // Lancement de la mise a jour reelle
     Case 3 : Echo "<table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"".$l ["couleur_fond"]."\" style=\"border-collapse:collapse;border:1px solid #000000\">" ;
	      Echo "<tr bgcolor=\"".$l ["lien"]."\"><td align=\"center\">&nbsp;<b>" ;
	      If (!IsSet ($type_maj)) { $type_maj = 0 ; }
	      If ($type_maj == 0) { Echo "Mise&nbsp;&agrave;&nbsp;jour..." ; } Else { Echo "Installation&nbsp;du&nbsp;module&nbsp;".$nom_module."..." ; }
	      Echo "</b>&nbsp;</td></tr>" ;
	      $ok_patch = 1 ;
	      $version_old = $version_garennes ;
              If (File_Exists ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur."garennes_maj.php"))
	       {
	        Include ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur."garennes_maj.php") ;
		// Verification de la presence de certains fichiers
		If (File_Exists ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$liste_fichiers) And
		    File_Exists ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$donnees))
		 {
		  Include ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur.$liste_fichiers) ;
		  $erreur = 0 ;
		  Include ("../../include/garennes_bdd.cfg") ;
		  Include ("../../include/liste_tables.inc") ;
		  $car_bases = caracteristiques_bases ($bdd, $test) ;
		  // Copie des fichiers
		  Echo "<tr><td>&nbsp;<br>&nbsp;Mise&nbsp;&agrave;&nbsp;jour&nbsp;des&nbsp;fichiers&nbsp;->&nbsp;" ;
		  $chemin_tempo = "..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour".$separateur ;
		  $f = FOpen ($chemin_tempo.$donnees, "r") ;
		  $ok_creation_fichier = 0 ;
		  For ($i = 1 ; $i <= $fiche [0][0] ; $i++)
		   {
		    $fiche [$i][0] = Str_Replace ("/", $separateur, $fiche [$i][0]) ;
                    $fiche [$i][1] = Str_Replace ("/", $separateur, $fiche [$i][1]) ;
		    // Creation du repertoire si n'existe pas
		    $ok_creation = 0 ;
		    If (!File_Exists ("..".$separateur."..".$separateur.$fiche [$i][0]))
                     {
                      $chemins = Explode ($separateur, $fiche [$i][0]) ;
                      $chemin_actuel = "" ;
                      For ($j = 1 ; $j < SizeOf ($chemins)-1 ; $j++)
                       { 
               	        $chemin_actuel .= $chemins [$j].$separateur ;
               	        If (!File_Exists ("..".$separateur."..".$separateur.$chemin_actuel))
                         {
                          $ok = @MkDir ("..".$separateur."..".$separateur.$chemin_actuel, 0755) ;
			  //If ($ok) { $ok_creation = 1 ; }
               	         }
			//Else { $ok_creation = 1 ; }
               	       }
		      If (File_Exists ("..".$separateur."..".$separateur.$fiche [$i][0])) { $ok_creation = 1 ; }
		      //Else { Echo "..".$separateur."..".$separateur.$fiche [$i][0]."<br>" ; }
                     }
		    Else { $ok_creation = 1 ; }
		    If ($ok_creation == 1) { $ok_creation_fichier++ ; }
		    // Creation ou remplacement du fichier si non vide
		    If ($fiche [$i][1] != "")
		     {
		      $contenu = FRead ($f, $fiche [$i][2]) ;
                      $fe = FOpen ("..".$separateur."..".$separateur.$fiche [$i][0].$fiche [$i][1], "w") ;
		      If ($fe)
		       {
                        FPuts ($fe, $contenu) ;
                        FClose ($fe) ;
		        $ok_creation_fichier++ ;
		       }
		      Else { Echo "..".$separateur."..".$separateur.$fiche [$i][0].$fiche [$i][1]."<br>" ; }
		     }
		    Else { $ok_creation_fichier++ ; }
		   }
		  If ($ok_creation_fichier == 2*$fiche [0][0]) { Echo "<b>OK</b>" ; } Else { Echo "<b>Echec</b>" ; }
		  Echo "&nbsp;<br>&nbsp;<br>" ;
		  
		  // Mise a jour des bdds
		  If ($base_sql != "")
		   {
		    $rapport = "" ;
		    For ($i = 1 ; $i <= $bdd [0][0] ; $i++)
		     {
		      // Connexion
		      $id_bdd = SQL_connexion ($sql_adresse, $sql_qui, $sql_passe, $bdd [$i][1], "") ;
                      If (!$id_bdd)
                       {
                        If ($f = @FSockOpen ($sql_adresse, $port, $errno, $errstr, $timeout))
                         {
                          FClose ($f) ;
                          $id_bdd = SQL_connexion ($sql_adresse, $sql_qui, $sql_passe, $bdd [$i][1], $sql_port) ;
                          If (!$id_bdd)
                           {
                            If ($sql_secondaire != "")
                             {
                              // Test le serveur secondaire si existe
                              If ($f = @FSockOpen ($sql_secondaire, $sql_port, $errno, $errstr, $timeout))
                               {
                                FClose ($f) ;
                                $id_bdd = SQL_connexion ($sql_secondaire, $sql_qui, $sql_passe, $bdd [$i][1], $sql_port) ;
                               }
                              ElseIf ($sql_tertiaire != "")
                               {
                                // Test le serveur tertiaire si existe
                                If ($f = @FSockOpen ($sql_tertiaire, $sql_port, $errno, $errstr, $timeout))
                                 {
                                  FClose ($f) ;
                                  $id_bdd = SQL_connexion ($sql_tertiaire, $sql_qui, $sql_passe, $bdd [$i][1], $sql_port) ;
                                 }
	                       }
                             }
                           }
                         }
                       }
                      If (!IsSet ($id_bdd) And ($bdd [$i][3] == 1))
                       {
		        $rapport .= "Base&nbsp;de&nbsp;donn&eacute;es&nbsp;".$bdd [$i][0]."&nbsp;->&nbsp;" ;
		        // Verification de version
                        $v = verif_version ($id_bdd) ;
                        $version = $v [0] ;
                        $num_version = $v [1] ;
		        // Test du nombre de tables
                        //$nbr_tables = SQL_commande ("SHOW TABLES FROM ".$base_choisie, $id_bdd) ;
                        //If (SQL_nbr_lignes ($nbr_tables) >= $nom_tables [0][0])
		        If ($version == $version_garennes)
                         {
		          // Version 0.6.4 -> Mise a jour supplementaire ?
		          If (test_presence_champ ("gestion", "coefficient", $id_bdd) == 1) { maj_064 ($id_bdd) ; }
		         }
		        Else
                         {
                          // Mise a jour de la base de donnees
	 	          // Verification que toutes les versions sont accessibles
		          If ($num_version > 0)
		           {
		            $pb = 0 ;
		            For ($i = $num_version ; $i <= $test [0][0] ; $i++)
		             {
		              If (test_lecture_fichier ("./include", "maj_".Str_Replace (".", "", $test [$i][0])."_".Str_Replace (".", "", $test [$i+1][0]).".sql") == 0) { $pb++ ; }
		             }
		           }
		          If ($num_version > 0)
		           {
		            $pb = 0 ;
			    $pb_ligne = "" ;
		            For ($j = $num_version ; $j <= $test [0][0] ; $j++)
		             {
		              $contenu = File ("../../include/maj_".Str_Replace (".", "", $test [$j][0])."_".Str_Replace (".", "", $test [$j+1][0]).".sql") ;
			      $rapport .= "Mise &agrave; jour de la ".$test [$j][0]." -> ".$test [$j+1][0]."&nbsp;" ;
		              $selection = SQL_selection_bd ($bdd [$i][1], $id_bdd) ;
		              $k = 0 ;
			      $pb_maj = 0 ;
		              While ($k < SizeOf ($contenu))
		               {
		                If ((SubStr ($contenu [$k], 0, 1) != "#") And (SubStr ($contenu [$k], 0, 1) != "\n"))
		                 {
		                  $ligne = Chop ($contenu [$k]) ;
		                  If (SubStr (Chop ($contenu [$k]), StrLen (Chop ($contenu [$k]))-1, 1) != ";")
		                   {
		                    $k++ ;
		                    While (SubStr (Chop ($contenu [$k]), StrLen (Chop ($contenu [$k]))-1, 1) != ";")
		                     {
		                      $ligne .= Chop ($contenu [$k]) ;
		                      $k++ ;
                                     }
                                    $ligne .= Chop ($contenu [$k]) ;
		                   }
                                  $ok = SQL_commande ($ligne, $id_bdd) ;
			          If (!$ok)
			           {
			            $rapport .= "<br>&nbsp;&nbsp;&nbsp;<font size=\"-2\">->&nbsp;Requ&ecirc;te&nbsp;:&nbsp;".$ligne."&nbsp;->&nbsp;<b>".SQL_message_erreur ($id_bdd)."</b></font>" ;
			            $pb++ ;
			  	    $pb_maj++ ;
			  	    $pb_ligne .= $ligne."<br>" ;
			           }
		                 }
                                $k++ ;
		               }
			      If ($pb_maj == 0) { $rapport .= "(<b>OK</b>)<br>" ; }
                              If ($test [$j+1][0] == "0.6.5") { maj_065 ($id_bdd) ; }
			      // Si version > 0.5.2 alors ecriture dans patch
			      If ($j > 2) { $ok_patch = 1 ; }
		             }
                            If ($pb == 0)
		             {
			      // Version 0.6.4 -> Mise a jour supplementaire
			      maj_064 ($id_bdd) ;
			     }
		           }
		         }
		       }
		      Else
		       {
		        // Pas de connexion sur la base $bdd [$i][0]
		       }
		     }
		    If ($multi_etablissement == 0)
		     {
		      // Insertion de la nouvelle base de donnees
		      $contenu = File ("..".$separateur."..".$separateur."include".$separateur.$base_sql) ;
		      $rapport .= "Mise&nbsp;&agrave;&nbsp;jour&nbsp;de&nbsp;la&nbsp;base&nbsp;de&nbsp;donn&eacute;es&nbsp;->&nbsp;" ;
		      $k = 0 ;
		      $pb_maj = 0 ;
		      While ($k < SizeOf ($contenu))
		       {
		        If ((SubStr ($contenu [$k], 0, 1) != "#") And (SubStr ($contenu [$k], 0, 1) != "\n"))
		         {
		          $ligne = Chop ($contenu [$k]) ;
		          If (SubStr (Chop ($contenu [$k]), StrLen (Chop ($contenu [$k]))-1, 1) != ";")
		           {
		            $k++ ;
		            While (SubStr (Chop ($contenu [$k]), StrLen (Chop ($contenu [$k]))-1, 1) != ";")
		             {
		              $ligne .= Chop ($contenu [$k]) ;
		              $k++ ;
                             }
                            $ligne .= Chop ($contenu [$k]) ;
		           }
                          $ok = SQL_commande ($ligne, $id_sql) ;
		          If (!$ok)
		           {
		            $rapport .= "<br>&nbsp;&nbsp;&nbsp;<font size=\"-2\">->&nbsp;Requ&ecirc;te&nbsp;:&nbsp;<b>".$ligne."</b>&nbsp;->&nbsp;<b>".SQL_message_erreur ($id_bdd)."</b></font>" ;
		            $pb++ ;
		            $pb_maj++ ;
		            $pb_ligne .= $ligne."<br>" ;
		           }
		         }
                        $k++ ;
		       }
		      If ($pb_maj == 0) { $rapport .= "<b>OK</b>&nbsp;<br>" ; }
		      // Affichage du rapport
		      Echo "&nbsp;".$rapport."&nbsp;</td></tr>" ;
		     }
		   }
		  
		  // Script de mise a jour
		  If ($script_maj != "")
		   {
		    $rapport = "" ;
		    Echo "<tr><td>&nbsp;<br>&nbsp;Lancement&nbsp;du&nbsp;script&nbsp;de&nbsp;mise&nbsp;&agrave;&nbsp;jour&nbsp;<br>" ;
		    Include ("../../include/".$script_maj) ;
		    // Affichage du rapport
		    Echo "&nbsp;".$rapport."&nbsp;</td></tr>" ;
		   }
		 }
	       }
	      Else
	       {
	        Echo "<tr><td>&nbsp;<br>Mise&nbsp;&agrave;&nbsp;jour&nbsp;des&nbsp;fichiers&nbsp;impossible&nbsp;:" ;
		Echo "&nbsp;il&nbsp;manque&nbsp;les&nbsp;fichiers&nbsp;dans&nbsp;le&nbsp;r&eacute;pertoire&nbsp;temporaire...&nbsp;<br>&nbsp;</td></tr>" ;
	       }
	      Echo "</table><br><center><a href=\"./travail.php\">&nbsp;Retour&nbsp;&agrave;&nbsp;la&nbsp;premi&egrave;re&nbsp;page&nbsp;</a></center></body></html>" ;
	      // Mise a jour patch
	      If (($ok_patch == 1) And ($type_maj == 0))
	       {
		If ($bdd [0][0] == 0)
		 {
		  $bdd [0][0] = 1 ;
		  If (IsSet ($_SESSION  ["bdd_sql"]) And ($_SESSION  ["bdd_sql"] != "")) { $bdd [1][0] = $_SESSION ["bdd_sql"] ; }
                  ElseIf (IsSet ($bdd_sql) And ($bdd_sql != "")) { $bdd [1][0] = $bdd_sql ; }
                  ElseIf ($sql_base != "") { $bdd [1][0] = $sql_base ; }
                  Else { $bdd [1][0] = "garennes" ; }
		 }
	        For ($i = 1 ; $i <= $bdd [0][0] ; $i++)
		 {
		  // Connexion
		  $id_bdd = SQL_connexion ($sql_adresse, $sql_qui, $sql_passe, $bdd [$i][1], "") ;
                  If (!$id_bdd)
                   {
                    If ($f = @FSockOpen ($sql_adresse, $port, $errno, $errstr, $timeout))
                     {
                      FClose ($f) ;
                      $id_bdd = SQL_connexion ($sql_adresse, $sql_qui, $sql_passe, $bdd [$i][1], $sql_port) ;
                      If (!$id_bdd)
                       {
                        If ($sql_secondaire != "")
                         {
                          // Test le serveur secondaire si existe
                          If ($f = @FSockOpen ($sql_secondaire, $sql_port, $errno, $errstr, $timeout))
                           {
                            FClose ($f) ;
                            $id_bdd = SQL_connexion ($sql_secondaire, $sql_qui, $sql_passe, $bdd [$i][1], $sql_port) ;
                           }
                          ElseIf ($sql_tertiaire != "")
                           {
                            // Test le serveur tertiaire si existe
                            If ($f = @FSockOpen ($sql_tertiaire, $sql_port, $errno, $errstr, $timeout))
                             {
                              FClose ($f) ;
                              $id_bdd = SQL_connexion ($sql_tertiaire, $sql_qui, $sql_passe, $bdd [$i][1], $sql_port) ;
                             }
	                   }
                         }
                       }
                     }
                   }
                  If (IsSet ($id_bdd))
                   {
		    $version = Str_Replace (".", "", $version_old."_".$patch_version) ;
		    $ok = SQL_commande ("ALTER TABLE patch CHANGE patch patch VARCHAR(200) NOT NULL", $id_bdd) ;
	            $ok = SQL_commande ("SELECT id_patch FROM patch WHERE patch='".$version."' LIMIT 1", $id_bdd) ;
                    If (SQL_nbr_lignes ($ok) == 0)
                     {
                      $ok = SQL_commande ("INSERT INTO patch (id_patch,patch,date) VALUES ('','".$version."','".Date ("Y-m-d H:i:s")."')", $id_bdd) ;
                     }
                    Else
                     {
                      $r = SQL_ligne_suivante ($ok) ;
                      $ok = SQL_commande ("UPDATE patch SET patch='".$version."',date='".Date ("Y-m-d H:i:s")."' WHERE id_patch='".$r [0]."' LIMIT 1", $id_bdd) ;
                     }
		   }
		 }
	       }
	       
              // Nettoyage
	      rmdir_recursif ("..".$separateur."..".$separateur."tmp".$separateur."mise_a_jour") ;
	      Exit ;
              Break ;
    }
  }
 
 If (IsSet ($script_maj) And ((($droit_courant == $droit_admin) And ($multi_etablissement == 0)) Or (($droit_courant == $droit_supervision) And ($multi_etablissement == 1))))
  {
   $separateur = determine_separateur_chemin () ;
   Switch ($script_maj)
    {
     Case 1 : // Telechargement du fichier
              If ($_FILES ["fichier"]["error"] == 0)
               {
                If (Is_UpLoaded_File ($_FILES ["fichier"]["tmp_name"]))
                 {
		  $nom = $_FILES ["fichier"]["name"] ;
		  $ok = @Copy ($_FILES ["fichier"]["tmp_name"], "..".$separateur."..".$separateur."tmp".$separateur.$nom) ;
		  If ($ok)
		   {
		    $emplacement = var_courante ("emplacement", 0, "") ;
		    If (SubStr ($emplacement, StrLen ($emplacement)-1, 1) != $separateur) { $emplacement .= $separateur ; }
		    If ($emplacement != "")
		     {
		      If (test_ecriture_fichier ("..".$separateur."..".$separateur.$emplacement, $nom))
		       {
		        @Copy ("..".$separateur."..".$separateur."tmp".$separateur.$nom, "..".$separateur."..".$separateur.$emplacement.$nom) ;
			$message = "Copie effectu&eacute;e...(".$repertoire_racine.$emplacement.$nom.")" ;
			// Nettoyage
		        @unlink ("..".$separateur."..".$separateur."tmp".$separateur.$nom) ;
		       }
		      Else
		       {
			Echo "<center><font color=\"#ff0000\"><b>Erreur &agrave; corriger pour effectuer la mise &agrave; jour :</b></font></center><br>" ;
			Echo "<table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"".$l ["couleur_fond"]."\" style=\"border-collapse:collapse;border:1px solid #000000\">" ;
			Echo "<tr bgcolor=\"".$l ["lien"]."\"><td align=\"center\">&nbsp;<b>Type</b>&nbsp;</td><td align=\"center\">&nbsp;<b>Nom</b>&nbsp;</td><td align=\"center\">&nbsp;<b>Probl&egrave;me</b>&nbsp;</td></tr>" ;
			Echo "<tr><td>&nbsp;Le&nbsp;fichier&nbsp;</td><td>&nbsp;<b>".$emplacement.$nom."</b>&nbsp;</td><td>&nbsp;n'est&nbsp;pas&nbsp;accessible&nbsp;en&nbsp;&eacute;criture.</td></tr>" ;
			Echo "</table><br>" ;
		        Echo "<center><font color=\"#ff0000\"><b>Corriger l'erreur ci-dessus, et reprenez la proc&eacute;dure de mise &agrave; jour...</b></font><br>" ;
			Echo "<br><br>Sous Linux (ou Unix), vous pouvez faire, en mode texte, un <b>\"chown &lt;nom utilisateur processus apache&gt; * -R\"</b> ou un <b>\"chmod 0777 * -R\"</b><br>" ;
			Echo "&agrave; partir du r&eacute;pertoire <b>".$repertoire_racine."</b><br><br>" ;
			Echo "Par exemple, sous Debian, le nom utilisateur du processus Apache est \"www-data\" d'o&ugrave; la commande : <b>\"chown www-data * -R\"</b><br>" ;
			Echo "<b>ATTENTION &Agrave; BIEN RESPECTER LES ESPACES.</b><br><br>" ;
			Echo "<a href=\"./travail.php\">&nbsp;Retour&nbsp;&agrave;&nbsp;la&nbsp;premi&egrave;re&nbsp;page&nbsp;</a>" ;
			Echo "</body></html>" ;
		        // Nettoyage
		        @unlink ("..".$separateur."..".$separateur."tmp".$separateur.$nom) ;
		        Exit ;
		       }
		     }
		   }
		  Else { $message = "Probl&egrave;me de cr&eacute;ation de fichier dans le r&eacute;pertoire temporaire..." ; }
		  // Nettoyage
		  @unlink ("..".$separateur."..".$separateur."tmp".$separateur.$nom) ;
                 }
               }
              Else
               {
                Switch ((integer)$_FILES ["fichier"]["error"])
                 {
                  Case 1 : $message = "Le param&egrave;tre <i>upload_max_filesize</i> dans php.ini est trop petit." ; Break ;
                  Case 2 : $message = "Le param&egrave;tre HTML <i>MAX_FILE_SIZE</i> est trop petit." ; Break ;
                  Case 3 : $message = "Le transfert du fichier ne s'est pas effectu&eacute; dans sa totalit&eacute;." ; Break ;
                  Case 4 : $message = "Aucun transfert de fichier ne s'est effectu&eacute;." ; Break ;
                 }
               }
              Break ;
    }
  }
 
 If ((($droit_courant == $droit_admin) And ($multi_etablissement == 0)) Or (($droit_courant == $droit_supervision) And ($multi_etablissement == 1)))
  {
   If ($message) { Echo "<center><font color=\"#ff0000\"><blink><b>".$message."</b></blink></font></center><br>" ; }
   // Par defaut -> Premiere page
   //Echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td valign=\"top\">" ;
   Echo "<div id=\"maj\"><table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"".$l ["couleur_fond"]."\" style=\"border-collapse:collapse;border:1px solid #000000\">" ;
   Echo "<tr><td align=\"center\" bgcolor=\"".$l ["lien"]."\"><b><a onclick=\"javascript:document.getElementById('script').style.display='';document.getElementById('maj').style.display='none';\">D</a>onner le fichier de mise &agrave; jour logiciel</B>.</TD></TR>" ;
   Echo "<tr><td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">" ;
   Echo "<form action=\"./mise_a_jour.php\" method=\"post\" enctype=\"multipart/form-data\">" ;
   Echo "<input type=\"hidden\" name=\"maj\" value=\"1\">" ;
   Echo "<tr><td><br></td></tr>" ;
   Echo "<tr><td align=\"center\">&nbsp;&nbsp;<input type=\"file\" name=\"fichier\" size=\"50\">&nbsp;&nbsp;</td></tr>" ;
   Echo "<tr><td><br></td></tr>" ;
   Echo "<tr><td align=\"center\">&nbsp;&nbsp;<input type=\"image\" src=\"../images/valider.png\">&nbsp;&nbsp;</td></tr>" ;
   Echo "</form></table>" ;
   Echo "</td></tr></table></div>" ;
   //Echo "</td></tr></table>" ;
   Echo "<div id=\"script\" style=\"display:none\"><table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"".$l ["couleur_fond"]."\" style=\"border-collapse:collapse;border:1px solid #000000\">" ;
   Echo "<tr><td align=\"center\" bgcolor=\"".$l ["lien"]."\"><b><a onclick=\"javascript:document.getElementById('maj').style.display='';document.getElementById('script').style.display='none';\">D</a>onner le script pour remplacement</B>.</TD></TR>" ;
   Echo "<tr><td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">" ;
   Echo "<form action=\"./mise_a_jour.php\" method=\"post\" enctype=\"multipart/form-data\">" ;
   Echo "<input type=\"hidden\" name=\"script_maj\" value=\"1\">" ;
   Echo "<tr><td><br></td></tr>" ;
   Echo "<tr><td align=\"center\">&nbsp;&nbsp;<input type=\"file\" name=\"fichier\" size=\"50\">&nbsp;&nbsp;</td></tr>" ;
   Echo "<tr><td><br></td></tr>" ;
   Echo "<tr><td align=\"center\">&nbsp;&nbsp;Emplacement&nbsp;:&nbsp;".$repertoire_racine."<input type=\"text\" name=\"emplacement\" size=\"50\">&nbsp;&nbsp;</td></tr>" ;
   Echo "<tr><td><br></td></tr>" ;
   Echo "<tr><td align=\"center\">&nbsp;&nbsp;<input type=\"image\" src=\"../images/valider.png\">&nbsp;&nbsp;</td></tr>" ;
   Echo "</form></table>" ;
   Echo "</td></tr></table></div>" ;
  }
 Else { Echo "<center>Vous n'avez pas de droits d'acc&egrave;s &agrave; ce service !</center>" ; }
 Echo "</body></html>" ;
?>